package org.rency.common.mq.request;

import java.io.Serializable;
import java.util.Date;
import java.util.Map;

import org.rency.common.mq.enums.AcknowledgeMode;
import org.rency.common.mq.enums.DeliveryMode;
import org.rency.common.mq.enums.DestinationType;
import org.rency.common.mq.enums.MessageFormat;
import org.rency.common.mq.enums.NotifyType;

/**
 * 消息请求接口
 * @author: user_rcy@163.com
 * </br>Created on 2016年4月8日
 * @version: V1.0.0
 * @since JDK 1.8
 */
public interface MQRequest extends Serializable{
	
	public Object getContent();
	
	public void setContent(Object object);

	/**
	 * 获取目的地名称
	 * @return 目的地名称
	 */
	public String getDestination();

	/**
	 * 设置目的地名称
	 * @param destination 目的地名称
	 */
	public void setDestination(String destination);

	/**
	 * 获取目的地类型
	 * @return 目的地类型
	 */
	public DestinationType getDestinationType();

	/**
	 * 设置目的地类型
	 * @param destinationType 目的地类型
	 */
	public void setDestinationType(DestinationType destinationType);

	/**
	 * 获取消息传输模式
	 * @return 消息传输模式
	 */
	public DeliveryMode getDeliveryMode();

	/**
	 * 设置消息传输模式
	 * @param deliveryMode 消息传输模式
	 */
	public void setDeliveryMode(DeliveryMode deliveryMode);

	/**
	 * 获取应答模式
	 * @return 应答模式
	 */
	public AcknowledgeMode getAcknowledgeMode();

	/**
	 * 设置应答模式
	 * @param acknowledgeMode 应答模式
	 */
	public void setAcknowledgeMode(AcknowledgeMode acknowledgeMode);

	/**
	 * 是否支持事务
	 * @return
	 */
	public boolean isTransacted();

	/**
	 * 设置是否支持事务
	 * @param sessionTransacted
	 */
	public void setTransacted(boolean transacted);

	/**
	 * 获取请求时间
	 * @return
	 */
	public Date getRequestTime();

	/**
	 * 设置请求时间
	 * @param requestTime
	 */
	public void setRequestTime(Date requestTime);
	
	/**
	 * 获取过期时间
	 * @return
	 */
	public long getExpirationTime();

	/**
	 * 设置过期时间
	 * @param expirationTime
	 */
	public void setExpirationTime(long expirationTime);
	
	/**
	 * 获取消息传输格式，默认为对象
	 * @return
	 */
	public MessageFormat getMessageFormat();
	
	/**
	 * 设置消息传输格式
	 * @param format
	 */
	public void setMessageFormat(MessageFormat format);

	public Map<String, Object> getProperties();

	public void setProperties(Map<String, Object> properties);
	
	/**
	 * 获取请求类型
	 * @return
	 */
	public NotifyType getNotifyType();
	
	/**
	 * 设置请求类型
	 * @param notifyType
	 */
	public void setNotifyType(NotifyType notifyType);

	public void addProperty(String key, Object value);
    
	public Object getProperty(String key);

	public boolean containsProperty(String string);

	public MQRequest deepCopy();
	
}